package com.norman.sorry.core.players;

import java.util.Collection;

import com.norman.sorry.core.boards.IBoard;
import com.norman.sorry.core.cards.ICard;
import com.norman.sorry.core.moves.IMove;
import com.norman.sorry.core.pieces.IPiece;

/**
 * Represents a game player. This interface requires a few basic methods that
 * are critical to the game.
 * 
 * @author Brian Norman
 * @version 0.0.1 beta
 * @since 0.0.1 beta
 */
public interface IPlayer {

   /**
    * Sets the game pieces that are under the player's control.
    * 
    * @param pieces
    *           game pieces under the player's control.
    */
   public void setPieces(Collection<IPiece> pieces);

   /**
    * Returns the game pieces the player controls. These game pieces all have
    * the same color.
    * 
    * @return the game pieces the player controls.
    */
   public Collection<IPiece> getPieces();

   /**
    * Returns the move that the player has decided on. This decision can be made
    * by a human player or by a computer.
    * 
    * @param card
    *           card the player drew.
    * @param board
    *           game board the player is on.
    * @return the move the player desires.
    */
   public IMove getMove(ICard card, IBoard board);

}